/*
* This file is part of RoboDS (http://code.google.com/p/robods/)
* Copyright (C) 2007 Blakharaz
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/

#ifndef __Prerequisites_H__
#define __Prerequisites_H__

namespace robo
{

    class Vector2
    {
    public:
	    unsigned short X;
	    unsigned short Y;

	    Vector2() : X(0), Y(0)	{}
	    Vector2(const Vector2& v) : X(v.X), Y(v.Y) {}
        Vector2(unsigned short x, unsigned short y) : X(x), Y(y) {}
    };

    struct Vector2Float
    {
	    float X;
	    float Y;
    };

    struct Rectangle
    {
	    unsigned short Left;
	    unsigned short Top;
	    unsigned short Right;
	    unsigned short Bottom;
    };

    enum Direction 
    {
	    TOP,
	    LEFT,
	    BOTTOM,
	    RIGHT
    };

    // rules taken from http://www.roborally.nl/index.php?sbj=rules
    enum BoardElementPhase
    {
	    PHASE_MOVE_ROBOTS,
	    PHASE_AUTOMATIC_CONVEYOURS_EXPRESS_1,
	    PHASE_AUTOMATIC_CONVEYOURS_EXPRESS_2,
	    PHASE_AUTOMATIC_CURRENTS,
	    PHASE_AUTOMATIC_PUSHERS,
	    PHASE_AUTOMATIC_GEARS,
	    PHASE_AUTOMATIC_CRUSHERS,
	    PHASE_AUTOMATIC_LASERS,
	    PHASE_AUTOMATIC_RADIATION,
	    PHASE_AUTOMATIC_ROBOT_EXTRAS,
	    PHASE_AUTOMATIC_CHECKPOINTS,
	    PHASE_AUTOMATIC_FLAMERS,
	    PHASE_AUTOMATIC_CHOP_SHOPS,
	    PHASE_AUTOMATIC_RADIOACTIVE_DRAW_CARD,
	    PHASE_AUTOMATIC_END_OF_TURN
    };

    enum Zoom
    {
        ZOOM_HALF,
        ZOOM_NORMAL,
        ZOOM_DOUBLE
    };

}

#endif // __Prerequisites_H__
